/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package bpmlab.shift.bean;

import bpmlab.shift.dao.DAOException;
import bpmlab.shift.dao.DAOFactory;
import bpmlab.shift.dao.service.GenericDAO;
import bpmlab.shift.entity.Lote;
import bpmlab.shift.entity.Processo;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author Mikael Lima
 */
@ManagedBean
@ViewScoped
public class LoteBean implements Serializable {

    private final GenericDAO<Processo> dao = DAOFactory.criarGenericDAO(Processo.class);
    private Processo processo;
    private Lote lote;
    private List<Processo> processos;

    @PostConstruct
    public void init() {
        processo = new Processo();
        lote = new Lote();
        lote.setDataDePesagem(new Date());
    }
    
    public void salvar() {
        try {
            processo.setLote(lote);
            processo.setAtual(lote.getLocalLote());
            dao.salvar(processo);
            processos.add(processo);
            init();
            JsfUtil.mensagemSalvoComSucesso();
        } catch (DAOException ex) {
            JsfUtil.mensagemErroAoSalvar();
        }
    }

    public void excluir() {
        try {
            dao.excluir(processo);
            processos.remove(processo);
            init();
            JsfUtil.mensagemRemovidoComSucesso();
        } catch (DAOException ex) {
            JsfUtil.mensagemErroAoRemover();
        }
    }

    public void alterar() {
        lote = processo.getLote();
    }
    
    public List<Processo> getProcessos() {
        if (processos == null) {
            processos = dao.obterTodos();
        }
        return processos;
    }

    public Processo getProcesso() {
        return processo;
    }

    public void setProcesso(Processo processo) {
        this.processo = processo;
    }

    public Lote getLote() {
        return lote;
    }

    public void setLote(Lote lote) {
        this.lote = lote;
    }

}
